home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 4_0 / FLIGHT / FXGRID.C < prev    next >
Text File  |  1990-01-26  |  2KB  |  135 lines

  1. /*
  2. #include <Quickdraw.h>
  3. #include <EventMgr.h>
  4. #include <WindowMgr.h>
  5. */
  6. #include <math.h>
  7. #include "defines.h"
  8.  
  9. #include "perspect.h"
  10.  
  11.  
  12. FxVector    fxGrid[GRID_SZ][GRID_SZ];
  13. FxVector    fxGridRot[GRID_SZ][GRID_SZ];
  14. FxVector    fxOriginV = {0, 0, 0};
  15.  
  16. FracThreeMatrx    fracRotatMatrx;
  17. FxThreeMatrx    transpCurrFxRotMatrx;
  18.  
  19. Fract    sinPtOne, cosPtOne, sinPtTwo, cosPtTwo;
  20. Fract    sinNPtOne, cosNPtOne, sinNPtTwo, cosNPtTwo;
  21.  
  22. extern    WindowPtr        theWind;    /*the main window*/
  23.  
  24.  
  25. MakeGrid()
  26. {
  27.     int    i, j;
  28.     Fixed    xVal, yVal, zVal;
  29.  
  30.     MkPort(theWind);
  31.     InitVars();
  32.  
  33.     yVal = iToFix(-100);
  34.     zVal = iToFix(-startHeight);
  35.  
  36.     for (i = 0; i < GRID_SZ; i++)
  37.     {
  38.         xVal = iToFix(-200);
  39.         for (j = 0; j < GRID_SZ; j++)
  40.         {
  41.             fxGrid[i][j].x = xVal;
  42.             fxGrid[i][j].y = yVal;
  43.             fxGrid[i][j].z = zVal;
  44.             xVal += iToFix(25);
  45.         }
  46.         yVal += iToFix(25);
  47.     }
  48.     BlockMove(fxGrid, fxGridRot, (long)64 * sizeof(FxVector));
  49.  
  50.     for (i = 0; i < GRID_SZ; i++)
  51.         FxPlotLine(&fxGrid[i][0], &fxGrid[i][GRID_SZ - 1]);
  52.  
  53.     for (j = 0; j < GRID_SZ; j++)
  54.         FxPlotLine(&fxGrid[0][j], &fxGrid[GRID_SZ - 1][j]);
  55. }
  56.  
  57. InitVars()
  58. {
  59.     int        i, j;
  60.  
  61.     for (i = 0; i < 3; i++)
  62.         for (j = 0; j < 3; j++)
  63.             if (i EQ j)
  64.                 fracRotatMatrx[i][j] = FRAC_ONE;
  65.             else
  66.                 fracRotatMatrx[i][j] = 0;
  67.     for (i = 0; i < 3; i++)
  68.         for (j = 0; j < 3; j++)
  69.             if (i EQ j)
  70.                 transpCurrFxRotMatrx[i][j] = FIX_ONE;
  71.             else
  72.                 transpCurrFxRotMatrx[i][j] = 0;
  73.  
  74. /*    sinPtOne = FracSin(DToFix(.1));*/
  75. {double    l;
  76. l = (long)
  77.         ldexp(0.1,16);
  78. }
  79.  
  80. sinPtOne = FracSin(
  81.         (long)
  82.         ldexp(0.1,16)
  83.         );
  84.  
  85.  
  86.     cosPtOne = FracCos(DToFix(.1));
  87.     sinPtTwo = FracSin(DToFix(.2));
  88.     cosPtTwo = FracCos(DToFix(.2));
  89.     sinNPtOne = FracSin(DToFix(-.1));
  90.     cosNPtOne = FracCos(DToFix(-.1));
  91.     sinNPtTwo = FracSin(DToFix(-.2));
  92.     cosNPtTwo = FracCos(DToFix(-.2));
  93. }
  94.  
  95.     
  96. typedef Fixed (*FProcPtr)() ;
  97.  
  98. pascal    FProcPtr    GetTrapAddress();
  99.  
  100. Fixed    (*FixMAddrs)(), (*FixDAddrs)();
  101.  
  102. AddrsSet()
  103. {
  104.     FixMAddrs = GetTrapAddress(0x68);
  105.     FixDAddrs = GetTrapAddress(0x00);    /* I don't know what this should be */
  106. }
  107.  
  108. long
  109. _FixMul(a, b)
  110. long    a, b;
  111. {
  112. asm{
  113.     subq.l    #4,sp
  114.     move.l    a,-(sp)
  115.     move.l    b,-(sp)
  116.     move.l    FixMAddrs,a0
  117.     jsr        (a0)
  118.     move.l    (sp)+,d0
  119.     }
  120. }
  121.  
  122. long
  123. _FixDiv(a, b)
  124. long    a, b;
  125. {
  126. asm{
  127.     subq.l    #4,sp
  128.     move.l    a,-(sp)
  129.     move.l    b,-(sp)
  130.     move.l    FixDAddrs,a0
  131.     jsr        (a0)
  132.     move.l    (sp)+,d0
  133.     }
  134. }
  135.